package com.rp.system.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.rp.common.exception.UsernameExistException;
import com.rp.common.utils.PropertiesLoader;
import com.rp.common.utils.RpUtil;
import com.rp.log.annotation.RpLog;
import com.rp.system.dao.RoleDao;
import com.rp.system.dao.UserDao;
import com.rp.system.po.Role;
import com.rp.system.po.User;

@Service
@Transactional
public class UserService {

	@Autowired
	private UserDao userDao;
	@Autowired
	private RoleDao roleDao;
	
	/**
	 * 检查用户名是否存在
	 * @param username
	 * @return
	 */
	public boolean checkUserExist(String username){
		User user  = userDao.getUserByUsername(username);
		if(user != null){
			return true;
		}
		return false;
	}
	
	public String registerUser(User user) throws Exception{
		if(checkUserExist(user.getUsername())){
			throw new UsernameExistException("用户名已存在");
		}
		
		if(user.getPassword().length() < 6){
			throw new Exception("密码不能少于6位数");
		}
		
		user.setPassword(RpUtil.md5Encrypt(user.getPassword()));
		if(user.getEnabled2() != null){
			if(user.getEnabled2().equals("1")){
				user.setEnabled(true);
			}else if(user.getEnabled2().equals("0")){
				user.setEnabled(false);
			}
			user.setEnabled2(user.getEnabled2());
		}else{
			user.setEnabled(false);
			user.setEnabled2("0");
		}
		
		user.setCreateDate(RpUtil.getCurrentDatetime());
		
		return (String) userDao.save(user);
	}
	
	/**
	 * 新增用户
	 * @param user
	 * @return
	 * @throws UsernameExistException
	 */
	@RpLog(desc="新增用户")
	public String addUser(User user) throws UsernameExistException{
		if(checkUserExist(user.getUsername())){
			throw new UsernameExistException("用户名已存在");
		}
		
		user.setPassword(RpUtil.md5Encrypt("888888"));
		if(user.getEnabled2() != null){
			if(user.getEnabled2().equals("1")){
				user.setEnabled(true);
			}else if(user.getEnabled2().equals("0")){
				user.setEnabled(false);
			}
			user.setEnabled2(user.getEnabled2());
		}else{
			user.setEnabled(false);
			user.setEnabled2("0");
		}
		
		user.setCreateDate(RpUtil.getCurrentDatetime());
		
		return (String) userDao.save(user);
	}
	
	
	/**
	 * 更新用户
	 * @param user
	 */
	@RpLog(desc="更新用户")
	public void updateUser(User user){
		String tmpEnabled = user.getEnabled2();
		if(tmpEnabled != null){
			if(tmpEnabled.equals("1")){
				user.setEnabled(true);
			}else if(tmpEnabled.equals("0")){
				user.setEnabled(false);
			}
		}
		
		user.setUpdateDate(RpUtil.getCurrentDatetime());
		userDao.update(user);
	}
	
	/**
	 * 更新用户头像路径
	 * @param headImg
	 */
	@RpLog(desc="更新用户头像")
	public void updateUserHeadImg(String userId, String headImg){
		User user = userDao.get(userId);
		user.setHeadImg(headImg);
		user.setUpdateDate(RpUtil.getCurrentDatetime());
		userDao.update(user);
	}
	
	/**
	 * 删除用户
	 * @param userId
	 */
	@RpLog(desc="删除用户")
	public void deleteUser(String userId){
		User user = userDao.get(userId);
		//user.setRoles(null);
		userDao.delete(user);
	}
	
	/**
	 * 重置密码
	 * @param userId
	 */
	public void resetPassword(String userId){
		String defaultPassword = PropertiesLoader.getValue("defaultPassword", null);
		User user = userDao.get(userId);
		user.setPassword(RpUtil.md5Encrypt(defaultPassword));
		user.setUpdateDate(RpUtil.getCurrentDatetime());
		userDao.update(user);
	}
	
	/**
	 * 修改密码
	 * @param userId 用户ID
	 * @param originalPwd 原密码
	 * @param newPwd 新密码
	 * @throws Exception 
	 */
	@RpLog(desc="修改密码")
	public void changePassword(String userId, String originalPwd, String newPwd) throws Exception{
		
		User user = userDao.get(userId);
		String oPwd = user.getPassword();
		//判断用户输入的原密码与数据库中保存的密码是否匹配
		if(oPwd.equals(RpUtil.md5Encrypt(originalPwd))){
			user.setPassword(RpUtil.md5Encrypt(newPwd));
		}else{
			throw new Exception("您输入的原密码不正确");
		}
		
	}
	
	public UserDao getUserDao() {
		return userDao;
	}
	
}
